Generally, a computer program is an ordered set or sequence of instructions to be processed, or executed, by a computer processor. The processor fetches the program instructions and executes them. Normally, instructions are fetched sequentially, with breaks in the sequence occurring when a branch or jump instruction is encountered. The order in which the instructions are fetched is the program order.
Many modern microprocessors allow instructions to execute out of order. In particular, instructions are placed in an issue queue in fetch-order. However, they are executed in issue-order. The processor attempts to execute instructions in the original fetched order, but some instructions may be delayed by dependencies resulting in the observed issue-order. Dependencies include register dependencies and memory dependencies. A register dependency results when an instruction requires a register value that is not yet available from a previous instruction. A memory dependency results when an instruction requires a register value that is not yet available from a previous load.
Further, as load and store instructions are issued, the load instructions tend to be processed immediately. On the other hand, each store instruction is either (i) held in a store queue pending a "dump" (i.e., its data being written) to a data cache or (ii) squashed if the store queue is full. The dump can only occur during a data cache cycle, in which there are no load instructions (or some other non-store operations) accessing the data cache.
In many microprocessors, the instructions are issued in an order where the load and store instructions are mixed together in an arbitrary pattern. As a result, there are no cycles or too few cycles in which a dump may occur. Thus, the store queue becomes full and a trap is generated. Ultimately, recovery from such a trap detracts from performance.
The terms load, load instruction and load operation instruction are used herein interchangeably and refer to instructions which cause data to be loaded, or read, from memory. This includes the usual load instructions, as well as move, compare, add, and so on where these instructions require the reading of data from memory or off-chip cache. Similarly, the terms store, store instruction and store operation instruction are used interchangeably and refer to instructions which cause data to be written to memory or off-chip cache.